package com.example.demo.mapper;

import com.example.demo.model.Employee;
import com.example.demo.model.LoginUser;
import org.apache.ibatis.annotations.Mapper;
import org.apache.ibatis.annotations.Param;

import java.util.List;

/**
 * Created with IntelliJ IDEA.
 * Description:
 * User: WJ
 * Date: 2023-02-17
 * Time: 21:34
 */
@Mapper
public interface EmployeeMapper {


    /**
     * 更新员工信息(person)
     * @param id             id
     * @param username       用户名
     * @param password       密码
     * @param sex            性别
     * @param age            年龄
     * @param phone          手机号
     * @param url            头像
     */
    Integer updateEmployeeInfoInPerson(Integer id,
                            String username,
                            String password,
                            String sex,
                            Integer age,
                            String phone,
                            String url);

    /**
     * 更新员工信息(employee_detail)
     * @param id          管理员id
     * @param address     地址
     */
    Integer updateEmployeeInfoInDetail(Integer id,
                                     String address);

    /**
     * 查询除了管理员之外的所有人员基础信息
     */
    List<LoginUser> getAllPersonInfoExceptAdmin();

    /**
     * 有 employeeId 就根据id查,没有就查全部
     * @param employeeId 员工id
     * @return 一个存放员工信息的list集合
     */
    List<LoginUser> getEmployeeList(@Param("employeeid") Integer employeeId);

    /**
     * 通过 adminId 查询下属的所有员工信息
     * @param adminId 管理员ID
     * @return     下属员工集合
     */
    List<Employee> getEmployeeListByAdminId(@Param("adminid") Integer adminId);


    /**
     * 获取当前登录用户下所管理的全部员工信息
     * @param id 当前登录的管理员id
     * @return 返回员工的集合
     */
    List<Employee> getAllEmployee(@Param("id") Integer id);

    /**
     * 重置员工得分
     * @param id 员工id
     * @return 受影响的行数
     */
    Integer updateEmployeeGrade(@Param("id") Integer id);

    /**
     * 更新员工信息(person)
     * @param id           员工id
     * @param username     用户名
     * @param age          年龄
     * @param phone        手机号
     * @return             被影响的行数
     */
    Integer updateEmployeeInfo(Integer id,
                               String username,
                               Integer age,
                               String phone);

    /**
     * 更新员工信息(employee_detail)
     * @param employeeId     员工id
     * @param area           负责范围
     * @param adminId        管理员id
     * @return               被影响的条数
     */
    Integer updateEmployeeInfoDetial(@Param("employee_id") Integer employeeId,
                                     String area,
                                     @Param("admin_id") Integer adminId,
                                     String address,
                                     String appraise);

    /**
     * 删除员工信息(person)
     * @param id   员工id
     * @return     删除的条数
     */
    Integer deleteEmployeeForAdmin(Integer id);

    /**
     * 删除员工数据(employee_detail)
     * @param id   员工id
     * @return     删除的条数
     */
    Integer deleteEmployeeForAdminInDetail(@Param("employee_id") Integer id);


    /**
     * 在person表中添加员工信息
     */
    Integer addEmployeeOnPerson(Employee employee);


    /**
     * 在employee_detail表中添加员工信息
     * @param employee_id      员工id
     * @param admin_id         所属管理员
     * @param id_card          身份证
     * @param address          地址
     * @param area             管理区域
     */
    Integer addEmployeeOnEmployeeDetail(Integer employee_id,
                                        Integer admin_id,
                                        String id_card,
                                        String address,
                                        String area);


    /**
     * 查询当前管理下的员工信息(可以根据用户名模糊查询，或者根据电话、性别、年龄精确查询)
     * @param adminId            当前登录管理员id
     * @param username           用户名
     * @param phone              手机号
     * @param sex                性别
     * @param age                年龄
     */
    List<Employee> getAllEmployeeByAdminIdLike(@Param("adminid") Integer adminId,
                                               String username,
                                               String phone,
                                               String sex,
                                               Integer age);

    /**
     * 获取所有员工信息
     */
    List<Employee> getAllEmployeeInfo();

    /**0
     * 通过employeeId获取详细的员工信息
     * @param id        员工id
     */
    Employee getDetailInfoByEmployeeId(Integer id);

    /**
     * 通过employeeId获取grade
     * @param id   employeeId
     */
    Employee getEmployeeGrade(Integer id);


    /**
     * 通过employeeId更新grade(评分)
     * @param id         employee_id
     * @param grade      新的分数
     */
    Integer updateEmployeeGradeByEmployeeIdForGrade(Integer id,
                                                    Float grade);
}
